home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Python 1.3.3 / stdwin / H / vt.h < prev    next >
Text File  |  1995-12-21  |  5KB  |  140 lines

  1. /* Interface for VT (Virtual Terminal windows) package */
  2.  
  3. /* WARNING: the cursor coordinate system is (row, col) here,
  4.    like in the ANSI escape sequences.
  5.    However, the origin is 0, and ranges are given in C style:
  6.    first, last+1.
  7.    ANSI escapes (which have origin 1) are translated as soon
  8.    as they are parsed. */
  9.  
  10. #define VTNARGS 10        /* Max # args in ansi escape sequence */
  11.  
  12. /* Structure describing a VT window */
  13.  
  14. typedef struct _vt {
  15.     WINDOW *win;        /* Window used for display */
  16.     char **data;        /* Character data array [row][col] */
  17.     unsigned char **flags;    /* Corresponding flags per character */
  18.     short *llen;        /* Line length array */
  19.     short rows, cols;    /* Size of data matrix */
  20.     short cwidth, cheight;    /* Character cell size */
  21.     short cur_row, cur_col;    /* Cursor position */
  22.     short save_row, save_col;    /* Saved cursor position */
  23.     short scr_top, scr_bot;    /* Scrolling region */
  24.     short topterm;        /* Top line of emulated terminal */
  25.     short toscroll;        /* Delayed screen scrolling */
  26.     unsigned char gflags;    /* Global flags for inserted characters */
  27.  
  28.     /* XXX The following Booleans are stored in characters.
  29.        This is probably the most efficient way to store them.
  30.        Since we normally have only one VT window per application,
  31.        space considerations are not important and we could even use
  32.        ints if they were faster. */
  33.  
  34.     char insert;        /* Insert mode */
  35.     char keypadmode;    /* Send ESC O A for arrows, not ESC [ A */
  36.     char nlcr;        /* \n implies \r */
  37.     char lazy;        /* Delay output operations */
  38.     char mitmouse;        /* Send ESC [ M <button;col;row> on clicks */
  39.     char visualbell;    /* Blink instead of beep (for ctrl-G) */
  40.     char flagschanged;    /* Set when certain state flags changed */
  41.     char drawing;        /* Used by VT{BEGIN,END}DRAWING() macros */
  42.  
  43.     /* State for the ANSI escape sequence interpreter */
  44.  
  45.     char modarg;        /* \0: ansi vt100; '?': DEC private mode etc */
  46.     char *(*action)();    /* Function to call for next input */
  47.     short *nextarg;        /* Points to current arg */
  48.     short args[VTNARGS];    /* Argument list */
  49.  
  50.     /* State for the selected region */
  51.  
  52.     short sel_row1, sel_col1; /* Start of selected region, <0 if nothing */
  53.     short sel_row2, sel_col2; /* End of selected region */
  54.  
  55.     /* XXX There ought to be an array of tab stops somewhere... */
  56. } VT;
  57.  
  58. /* Flags in gflags and flags array.
  59.    These correspond to the ANSI codes used in ESC [ ... m.
  60.    Not all are implemented! */
  61.  
  62. #define VT_BOLD        (1 << 1)
  63. #define VT_DIM        (1 << 2)
  64. #define VT_UNDERLINE    (1 << 4)
  65. #define VT_BLINK    (1 << 5)
  66. #define VT_INVERSE    (1 << 7)
  67. #define VT_SELECTED    (1 << 3)    /* <- This one does NOT correspond */
  68.  
  69. /* Access macros */
  70.  
  71. #define vtcheight(vt)            ((vt)->cheight)
  72. #define vtcwidth(vt)            ((vt)->cwidth)
  73. #define vtwindow(vt)            ((vt)->win)
  74.  
  75. #define vtsetnlcr(vt, new_nlcr)        ((vt)->nlcr = (new_nlcr))
  76. #define vtsetlazy(vt, new_lazy)        ((vt)->lazy= (new_lazy))
  77. #define vtsetflags(vt, new_flags)    ((vt)->gflags= (new_flags))
  78. #define vtsetinsert(vt, new_insert)    ((vt)->insert= (new_insert))
  79.  
  80. /* Basic functions (vt.c) */
  81.  
  82. VT *vtopen _ARGS((char *title, int rows, int cols, int save));
  83. void vtclose _ARGS((VT *vt));
  84. void vtputstring _ARGS((VT *vt, char *text, int len));
  85. void vtsetcursor _ARGS((VT *vt, int row, int col));
  86. void vtreset _ARGS((VT *vt));
  87. VT *vtfind _ARGS((WINDOW *win));
  88.  
  89. /* Optional functions (vtansi.c, vtputs.c, vtresize.c) */
  90.  
  91. void vtansiputs _ARGS((VT *vt, char *text, int len));
  92. void vtputs _ARGS((VT *vt, char *text));
  93. /*bool*/int vtresize _ARGS((VT *vt, int rows, int cols, int save));
  94. /*bool*/int vtautosize _ARGS((VT *vt));
  95.  
  96. /* Functions used by the ANSI interface (vtfunc.c) */
  97.  
  98. void vtresetattr _ARGS((VT *vt));
  99. void vtsetattr _ARGS((VT *vt, int bit));
  100. void vtsavecursor _ARGS((VT *vt));
  101. void vtrestorecursor _ARGS((VT *vt));
  102. void vtarrow _ARGS((VT *vt, int code, int repeat));
  103. void vteolclear _ARGS((VT *vt, int row, int col));
  104. void vteosclear _ARGS((VT *vt, int row, int col));
  105. void vtlinefeed _ARGS((VT *vt, int repeat));
  106. void vtrevlinefeed _ARGS((VT *vt, int repeat));
  107. void vtinslines _ARGS((VT *vt, int n));
  108. void vtdellines _ARGS((VT *vt, int n));
  109. void vtscrollup _ARGS((VT *vt, int r1, int r2, int n));
  110. void vtscrolldown _ARGS((VT *vt, int r1, int r2, int n));
  111. void vtinschars _ARGS((VT *vt, int n));
  112. void vtdelchars _ARGS((VT *vt, int n));
  113. void vtsetscroll _ARGS((VT *vt, int top, int bot));
  114. void vtsendid _ARGS((VT *vt));
  115. void vtsendpos _ARGS((VT *vt));
  116.  
  117. /* Selection interface (vtselect.c) */
  118.  
  119. /* XXX This will change */
  120. int  vtselect _ARGS((VT *vt, EVENT *ep));
  121. int  vtextendselection _ARGS((VT *vt, EVENT *ep));
  122.  
  123. /* Macros to avoid too many wbegindrawing calls */
  124.  
  125. #define VTBEGINDRAWING(vt) \
  126.     if (!(vt)->drawing) { wbegindrawing((vt)->win); (vt)->drawing= 1; }
  127. #define VTENDDRAWING(vt) \
  128.     if ((vt)->drawing) { wenddrawing((vt)->win); (vt)->drawing = 0; }
  129.  
  130. /* Note -- the main application *MUST* call VTENDDRAWING(vt) before
  131.    it calls wgetevent(). */
  132.  
  133. #ifndef NDEBUG
  134.  
  135. /* Panic function.  The caller may provide one.  The library has a default. */
  136.  
  137. void vtpanic _ARGS((char *));
  138.  
  139. #endif /* NDEBUG */
  140.